Program files or source code files typically include one or more functions, which can include lines of code to perform a task, procedure, or routine when executed. During software development, users such as programmers may modify files using Code Management Software (CMS) that can include a software versioning system, source control system, or revision control system. Some examples of CMS can include Apache Subversion (SVN), Git, Microsoft Team Foundation Server (TFS), Helix VCS, Mercurial, or IBM Rational ClearCase. Such CMS can usually track changes made in a file, which can be especially useful when coordinating software development among a group of users. The CMS may also provide information about the file such as a last author for a latest version of the file.
In order to determine changes made to a particular function within a file, a user typically must perform a diff operation in the CMS to compare all of the lines of code in two different versions of the file. The user then manually filters or reads through the diff results to attempt to identify any changes made to a particular function. However, such identification of function changes is usually a tedious and error prone process. In some cases, a function may be significantly changed, relocated from one area of the file to another area, or moved to a different file altogether. Each of these examples may make it very difficult for a user to follow the same function to determine what was changed in the function. It may also be difficult for a user to determine who made which changes to the function or who may have made intermediate changes between the versions being compared, since conventional CMS generally tracks authors and changes at the file level.